export const MOBILE_REG = /^[1][3,4,5,6,7,8,9][0-9]{9}$/

/**
 * 用户名
 * @param rule 验证规则（不含特殊字符）
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateUsername = (rule, value, callback) => {
  const reg = /^[a-zA-Z0-9_\u4e00-\u9fa5]{1,16}$/
  if (value.length > 16) {
    callback(new Error('长度不能超过16个字符'))
  } else if (!reg.test(value)) {
    callback(new Error('仅支持大小写英文、中文和下划线_'))
  } else {
    callback()
  }
}

/**
 * 密码格式验证
 * @param rule 验证规则（不少于6位）
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validatePassword = (rule, value, callback) => {
  if (value.length < 6) {
    callback(new Error('密码长度不得小于6位'))
  } else {
    callback()
  }
}

/**
 * 密码格式验证
 * @param rule 验证规则（不少于6位）
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validatePasswordCustom = (value) => {
  if (!value || value.length < 8) {
    return '密码长度不得小于8位'
  } else {
    let grade = 0
    let charTypes = 0
    if (/\d/.test(value)) {
      grade++ //数字
      charTypes++
    }
    if (/[a-z]/.test(value)) {
      grade++ //小写
      charTypes++
    }
    if (/[A-Z]/.test(value)) {
      grade++ //大写
      charTypes++
    }
    // if (/\W/.test(value)) {
    //   grade++ //特殊字符
    //   charTypes++
    // }
    if (charTypes < 3) {
      return '密码必须包含数字、大小写字母'
    } else {
      return true
    }
  }
}

/**
 * 手机号码格式验证
 * @param rule 验证规则
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateMobile = (value, callback) => {
  if (value !== '' && !MOBILE_REG.test(value)) {
    return '手机号格式错误'
  } else {
    return true
  }
}

/**
 * 固定电话格式验证
 * @param rule 验证规则
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateLandline = (value, callback) => {
  const reg = /\d{3}-\d{8}|\d{4}-\d{7}|\d{3}-\d{7}/
  if (value !== '' && !reg.test(value)) {
    return '固话格式错误'
  } else {
    return true
  }
}

/**
 * 手机号和固话格式验证
 * @param {*} rule
 * @param {*} value
 * @param {*} callback
 */
export const validatePhone = (value, callback) => {
  const regMobile = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
  const regLandline = /\d{3}-\d{8}|\d{4}-\d{7}|\d{3}-\d{7}/
  if (value !== '' && !(regMobile.test(value) || regLandline.test(value))) {
    return '号码格式错误'
  } else {
    return true
  }
}

/**
 * 身份证正则
 */
export const IDCARD_REG = {
  // 内地身份证正则
  INLAND: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
  // 香港身份证正则
  HONGKONG: /^[A-Z]{1,2}[0-9]{6}[(]?[0-9A]$/,
  // 台湾身份证正则
  TAIWAN: /^[A-Z][0-9]{9}$/,
  // 澳门身份证正则
  MACAO: /^[157][0-9]{6}|[18][0-9]{8}$/
}

/**
 * 身份证号码格式验证
 * @param rule 验证规则（是否满足18位）
 * @param value 需要验证的值
 * @param callback 回调函数
 */
export const validateIDCard = (rule, value, callback) => {
  if (!IDCARD_REG.INLAND.test(value)) {
    callback(new Error('身份证号码格式错误'))
  } else {
    callback()
  }
}

/**
 * 港澳台身份证号码格式验证
 * @param {*} rule
 * @param {*} value
 * @param {*} callback
 */
export const validateIDCardGAT = (rule, value, callback) => {
  if (!(IDCARD_REG.HONGKONG.test(value) || IDCARD_REG.TAIWAN.test(value) || IDCARD_REG.MACAO.test(value))) {
    callback(new Error('身份证号码格式错误'))
  } else {
    callback()
  }
}

/**
 * 邮箱格式验证
 * @param {*} rule
 * @param {*} value
 * @param {*} callback
 */
export const validateEmail = (value, callback) => {
  const reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/
  if (value !== '' && !reg.test(value)) {
    return '邮箱格式错误'
  } else {
    return true
  }
}
